/* ==========================================================================
   Marshaller – Global Stylesheet (main.css)
   Single source of truth for all app styling.
   Dark-first design inspired by Hoboleaks / EveRef aesthetic.
   ========================================================================== */

/* ==========================================================================
   1. Design System Variables — Dark-first palette
   ========================================================================== */

:root {
  /* Dark-first palette inspired by Hoboleaks/EveRef */
  --m-bg-primary: #0d1117;        /* Main background — very dark */
  --m-bg-secondary: #161b22;      /* Cards, surfaces */
  --m-bg-tertiary: #1c2128;       /* Slightly elevated surfaces */
  --m-bg-hover: #1f2937;          /* Hover states */
  --m-border: #30363d;            /* Borders */
  --m-border-subtle: #21262d;     /* Subtle borders */
  --m-text-primary: #e6edf3;      /* Primary text */
  --m-text-secondary: #8b949e;    /* Secondary / muted text */
  --m-text-link: #58a6ff;         /* Links */
  --m-accent: #58a6ff;            /* Primary accent */
  --m-accent-hover: #79c0ff;      /* Accent hover */

  /* Diff colours */
  --m-diff-add-bg: rgba(46, 160, 67, 0.15);
  --m-diff-add-text: #7ee787;
  --m-diff-del-bg: rgba(248, 81, 73, 0.15);
  --m-diff-del-text: #ffa198;
  --m-diff-modify-bg: rgba(187, 128, 9, 0.15);
  --m-diff-modify-text: #e3b341;

  /* DataTables */
  --m-table-stripe: rgba(255, 255, 255, 0.02);
  --m-table-hover: rgba(255, 255, 255, 0.05);

  /* Form inputs */
  --m-input-bg: #0d1117;
  --m-input-border: #30363d;

  /* Badges */
  --m-badge-bg: #30363d;

  /* Value accent (green for numeric values) */
  --m-value-color: #81C784;

  /* Damage type colours (EVE Online) */
  --m-dmg-em: #6527BE;
  --m-dmg-thermal: #FF0303;
  --m-dmg-kinetic: #9DBC98;
  --m-dmg-explosive: #F4CE14;

  /* Danger/warning */
  --m-danger: #ff4d4d;
  --m-danger-bg: rgba(255, 0, 0, 0.15);

  /* Shadows */
  --m-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
  --app-sticky-offset: 62px;
}

/* ==========================================================================
   2. Light-mode overrides
   ========================================================================== */

[data-bs-theme="light"] {
  --m-bg-primary: #ffffff;
  --m-bg-secondary: #f6f8fa;
  --m-bg-tertiary: #f0f2f5;
  --m-bg-hover: #e9ecef;
  --m-border: #d0d7de;
  --m-border-subtle: #e8e8e8;
  --m-text-primary: #1f2328;
  --m-text-secondary: #656d76;
  --m-text-link: #0969da;
  --m-accent: #0969da;
  --m-accent-hover: #0550ae;
  --m-diff-add-bg: rgba(46, 160, 67, 0.1);
  --m-diff-add-text: #1a7f37;
  --m-diff-del-bg: rgba(248, 81, 73, 0.1);
  --m-diff-del-text: #cf222e;
  --m-diff-modify-bg: rgba(187, 128, 9, 0.1);
  --m-diff-modify-text: #9a6700;
  --m-table-stripe: rgba(0, 0, 0, 0.02);
  --m-table-hover: rgba(0, 0, 0, 0.04);
  --m-input-bg: #ffffff;
  --m-input-border: #d0d7de;
  --m-badge-bg: #e8e8e8;
  --m-value-color: #4CAF50;
  --m-danger: #dc3545;
  --m-danger-bg: rgba(220, 53, 69, 0.1);
  --m-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.05);
}

/* ==========================================================================
   3. Global base / body
   ========================================================================== */

body {
  background-color: var(--m-bg-primary);
  color: var(--m-text-primary);
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
  font-size: 14px;
  line-height: 1.5;
}

a { color: var(--m-text-link); }
a:hover { color: var(--m-accent-hover); }

strong { color: var(--m-text-primary); }

.text-muted { color: var(--m-text-secondary) !important; }
.mini { color: var(--m-text-secondary); font-size: 0.875rem; }

/* ==========================================================================
   4. Navbar — Hoboleaks-inspired minimal
   ========================================================================== */

.navbar {
  background-color: var(--m-bg-secondary) !important;
  border-bottom: 1px solid var(--m-border);
  padding: 0;
  min-height: auto;
}

.navbar .navbar-brand {
  color: var(--m-text-primary);
  font-weight: 600;
  font-size: 1rem;
  padding: 0.5rem 1rem;
}

.navbar .nav-link {
  color: var(--m-text-secondary);
  font-size: 0.85rem;
  padding: 0.5rem 0.75rem;
  transition: color 0.15s;
}

.navbar .nav-link:hover,
.navbar .nav-link.active {
  color: var(--m-text-primary);
}

.navbar .nav-link.active {
  border-bottom: 2px solid var(--m-accent);
}

.nav-divider {
  width: 1px;
  background-color: var(--m-border);
  margin: 0.25rem 0.25rem;
  align-self: stretch;
}

/* Navbar toggler icon visibility in dark mode */
.navbar-toggler {
  border-color: var(--m-border);
}

.navbar-toggler-icon {
  filter: invert(1);
}

[data-bs-theme="light"] .navbar-toggler-icon {
  filter: none;
}

/* Navbar item alignment */
.nav-item {
  display: flex;
  align-items: center;
}

/* ==========================================================================
   5. Cards
   ========================================================================== */

.card {
  background-color: var(--m-bg-secondary);
  border-color: var(--m-border);
}

.card-header {
  background-color: var(--m-bg-tertiary);
  border-bottom-color: var(--m-border);
}

/* ==========================================================================
   6. Tables — dense, Hoboleaks-like
   ========================================================================== */

.table {
  color: var(--m-text-primary);
  border-color: var(--m-border);
  font-size: 0.875rem;
  --bs-table-striped-color: var(--m-text-primary);
}

.table > :not(caption) > * > * {
  padding: 0.25rem 0.4rem;
  border-bottom-color: var(--m-border-subtle);
  background-color: transparent;
}

.dense-table td,
.dense-table th {
  line-height: 1.3;
}

.table-striped > tbody > tr:nth-of-type(odd) > * {
  background-color: var(--m-table-stripe);
}

.table-hover > tbody > tr:hover > * {
  background-color: var(--m-table-hover);
}

.table td {
  background-color: var(--m-bg-primary);
}

.table thead th {
  background-color: var(--m-bg-tertiary);
  border-bottom: 2px solid var(--m-border);
  font-weight: 600;
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--m-text-secondary);
}

/* ==========================================================================
   7. Diff styling (ins / del)
   ========================================================================== */

del {
  background-color: var(--m-diff-del-bg);
  color: var(--m-diff-del-text);
  text-decoration: line-through;
  padding: 1px 4px;
  border-radius: 3px;
}

ins {
  background-color: var(--m-diff-add-bg);
  color: var(--m-diff-add-text);
  text-decoration: none;
  padding: 1px 4px;
  border-radius: 3px;
}

/* Override inline background styles from diff library output */
ins[style*="background"] {
  background-color: var(--m-diff-add-bg) !important;
  color: var(--m-diff-add-text) !important;
}

del[style*="background"] {
  background-color: var(--m-diff-del-bg) !important;
  color: var(--m-diff-del-text) !important;
}

/* ==========================================================================
   8. DataTables integration
   ========================================================================== */

.dataTables_wrapper {
  color: var(--m-text-primary);
}

.dataTables_wrapper .dataTables_filter input,
.dataTables_wrapper .dataTables_length select {
  background-color: var(--m-input-bg);
  color: var(--m-text-primary);
  border-color: var(--m-input-border);
  border-radius: 4px;
  padding: 0.25rem 0.5rem;
  font-size: 0.875rem;
}

.dataTables_wrapper .dataTables_paginate .paginate_button {
  background-color: var(--m-bg-secondary) !important;
  color: var(--m-text-primary) !important;
  border-color: var(--m-border);
  padding: 0.25rem 0.6rem;
  margin: 0 0.15rem;
  border-radius: 4px;
  font-size: 0.85rem;
}

.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
  background-color: var(--m-bg-hover) !important;
}

.dataTables_wrapper .dataTables_paginate .paginate_button.current {
  background-color: var(--m-accent) !important;
  color: #fff !important;
  border-color: var(--m-accent);
}

.dataTables_wrapper .dataTables_paginate .paginate_button.disabled {
  color: var(--m-text-secondary) !important;
  cursor: not-allowed;
}

.dataTables_wrapper .dataTables_info {
  color: var(--m-text-secondary);
  font-size: 0.85rem;
}

/* ==========================================================================
   9. Form controls
   ========================================================================== */

.form-control, .form-select {
  background-color: var(--m-input-bg);
  color: var(--m-text-primary);
  border-color: var(--m-input-border);
}

.form-control:focus, .form-select:focus {
  background-color: var(--m-input-bg);
  color: var(--m-text-primary);
  border-color: var(--m-accent);
  box-shadow: 0 0 0 0.2rem rgba(88, 166, 255, 0.25);
}

.form-select option {
  background-color: var(--m-bg-secondary);
  color: var(--m-text-primary);
}

/* ==========================================================================
   10. Buttons
   ========================================================================== */

.btn {
  font-size: 0.85rem;
  padding: 0.3rem 0.75rem;
}

.btn-primary {
  background-color: var(--m-accent);
  border-color: var(--m-accent);
  color: #fff;
}

.btn-primary:hover {
  background-color: var(--m-accent-hover);
  border-color: var(--m-accent-hover);
}

.btn-secondary {
  background-color: var(--m-bg-tertiary);
  border-color: var(--m-border);
  color: var(--m-text-primary);
}

.btn-secondary:hover {
  background-color: var(--m-bg-hover);
}

/* Workbench-scoped buttons */
.wb-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.78rem;
  font-weight: 500;
  padding: 0.3rem 0.7rem;
  border-radius: 6px;
  border: 1px solid transparent;
  cursor: pointer;
  transition: all 0.15s ease;
  white-space: nowrap;
  text-decoration: none;
}

.wb-btn--compact {
  padding: 0.22rem 0.55rem;
  font-size: 0.72rem;
}

.wb-btn--ghost {
  background: transparent;
  border-color: var(--m-border);
  color: var(--m-text-secondary);
}

.wb-btn--ghost:hover {
  background: var(--m-bg-hover);
  color: var(--m-text-primary);
  border-color: var(--m-border);
}

.wb-btn--accent {
  background: color-mix(in srgb, var(--m-accent) 15%, transparent);
  border-color: color-mix(in srgb, var(--m-accent) 40%, transparent);
  color: var(--m-accent);
}

.wb-btn--accent:hover {
  background: color-mix(in srgb, var(--m-accent) 25%, transparent);
  border-color: var(--m-accent);
  color: var(--m-accent-hover);
}

.wb-btn--block {
  width: 100%;
  justify-content: center;
}

/* ==========================================================================
   11. Theme toggle (slider)
   ========================================================================== */

.theme-switch-wrapper {
  display: flex;
  align-items: center;
  height: 100%;
  padding: 0.5rem 0;
}

.theme-switch-wrapper em {
  margin-left: 10px;
  color: var(--m-text-secondary);
  font-style: normal;
  line-height: 1.2;
}

.theme-switch {
  position: relative;
  display: flex;
  align-items: center;
  width: 60px;
  height: 34px;
  margin: 0;
}

.theme-switch input {
  opacity: 0;
  width: 0;
  height: 0;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  transition: .4s;
  border-radius: 34px;
}

.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  transition: .4s;
  border-radius: 50%;
}

input:checked + .slider {
  background-color: #2196F3;
}

input:checked + .slider:before {
  transform: translateX(26px);
}

/* ==========================================================================
   12. Tabs (standardised)
   ========================================================================== */

.nav-tabs {
  border-bottom: 1px solid var(--m-border);
}

.nav-tabs .nav-link {
  color: var(--m-text-secondary);
  border: 1px solid transparent;
  padding: 0.5rem 1rem;
  font-size: 0.875rem;
}

.nav-tabs .nav-link:hover {
  color: var(--m-text-primary);
  border-color: var(--m-border) var(--m-border) transparent;
}

.nav-tabs .nav-link.active {
  color: var(--m-text-primary);
  background-color: var(--m-bg-primary);
  border-color: var(--m-border) var(--m-border) var(--m-bg-primary);
}

/* ==========================================================================
   13. Section header with count (Hoboleaks-style)
   ========================================================================== */

.section-header {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.5rem 0;
  margin-bottom: 0.75rem;
  border-bottom: 1px solid var(--m-border);
  color: var(--m-text-primary);
  font-size: 1rem;
  font-weight: 600;
}

.section-header .entry-count {
  color: var(--m-text-secondary);
  font-weight: 400;
  font-size: 0.85rem;
}

/* ==========================================================================
   14. Detail sections (attribute_detail, dogma_effects_detail)
   ========================================================================== */

.detail-section {
  padding: 1rem 1.5rem;
  background-color: var(--m-bg-secondary);
  border-radius: 6px;
  max-width: 1200px;
  margin: 0 auto;
  border: 1px solid var(--m-border);
}

.detail-row,
.attribute-row,
.effect-row {
  display: flex;
  padding: 0.5rem 1rem;
  border-bottom: 1px solid var(--m-border-subtle);
  gap: 1rem;
  font-size: 0.875rem;
}

.detail-row:last-child,
.attribute-row:last-child,
.effect-row:last-child {
  border-bottom: none;
}

.detail-row strong,
.attribute-row strong,
.effect-row strong {
  flex: 0 0 200px;
  color: var(--m-text-secondary);
}

.detail-row span,
.attribute-row span,
.effect-row span {
  flex: 1;
  min-width: 300px;
}

/* ==========================================================================
   15. Admin page
   ========================================================================== */

.admin-panel {
  max-width: 1200px;
  margin: 0 auto;
  padding: 1rem;
}

.info-card {
  background-color: var(--m-bg-secondary);
  padding: 1rem;
  margin-bottom: 1rem;
  border-radius: 6px;
  border: 1px solid var(--m-border);
  border-left: 4px solid var(--m-accent);
}

.token-expired {
  background-color: var(--m-diff-del-bg);
  color: var(--m-diff-del-text);
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-size: 0.85em;
}

.token-valid {
  background-color: var(--m-diff-add-bg);
  color: var(--m-diff-add-text);
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-size: 0.85em;
}

.token-expires {
  padding: 3px 8px;
  border-radius: 3px;
  font-size: 0.9em;
}

.real-time {
  color: var(--m-accent);
  font-size: 0.9em;
}

/* ==========================================================================
   16. Dungeon detail
   ========================================================================== */

details summary {
  cursor: pointer;
  padding: 0.4rem 0.6rem;
  background-color: var(--m-bg-tertiary);
  border-radius: 4px;
  font-size: 0.875rem;
}

details summary:hover {
  background-color: var(--m-bg-hover);
}

/* ==========================================================================
   17. Explorer page cards / grid
   ========================================================================== */

.category-card, .group-card, .type-card {
  cursor: pointer;
  transition: transform 0.2s, box-shadow 0.2s;
  height: 100%;
  border-color: var(--m-border);
  background-color: var(--m-bg-secondary);
}

.category-card:hover, .group-card:hover, .type-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
  border-color: var(--m-accent);
}

/* ==========================================================================
   18. Components page collapsible
   ========================================================================== */

.collapsible {
  cursor: pointer;
  color: var(--m-text-link);
  padding: 0.4rem 0.6rem;
  border-radius: 4px;
  display: inline-block;
  font-weight: 600;
  font-size: 0.875rem;
}

.collapsible:hover {
  background-color: var(--m-bg-hover);
}

.content {
  display: none;
  margin-left: 1rem;
  padding: 0.5rem 0.75rem;
  background-color: var(--m-bg-secondary);
  border-radius: 4px;
  border-left: 3px solid var(--m-accent);
}

.json-key {
  color: var(--m-accent);
  font-weight: 600;
}

.json-value {
  color: var(--m-diff-del-text);
  margin-left: 0.5rem;
}

.json-pair {
  margin: 4px 0;
  font-family: monospace;
}

.json-top-level {
  background-color: transparent;
}

pre {
  background-color: transparent !important;
  border: none !important;
  padding: 0 !important;
  margin: 0 !important;
}

/* ==========================================================================
   19. Change markers (attributes / effects diff)
   ========================================================================== */

.change-row { margin: 3px 0; }

/* ==========================================================================
   20. Search / filter styles
   ========================================================================== */

.filter-container { margin-bottom: 0.75rem; }

.type-result:hover {
  background-color: var(--m-bg-hover);
  cursor: pointer;
}

/* ==========================================================================
   21. Pagination
   ========================================================================== */

.page-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 42px;
  min-height: 42px;
  padding: 0.5rem 0.8rem;
  border-radius: 999px;
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--m-bg-secondary) 96%, rgba(255,255,255,0.03)) 0%, color-mix(in srgb, var(--m-bg-secondary) 100%, transparent) 100%);
  border-color: color-mix(in srgb, var(--m-border) 82%, rgba(255,255,255,0.06));
  color: var(--m-text-primary);
  font-size: 0.84rem;
  font-weight: 600;
  line-height: 1;
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.12);
  transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}

.page-link:hover {
  background: color-mix(in srgb, var(--m-bg-hover) 86%, rgba(88, 166, 255, 0.08));
  border-color: color-mix(in srgb, var(--m-accent) 34%, var(--m-border));
  color: var(--m-text-primary);
  transform: translateY(-1px);
  box-shadow: 0 12px 24px rgba(0, 0, 0, 0.18);
}

.page-item.active .page-link {
  background: linear-gradient(180deg, color-mix(in srgb, var(--m-accent) 82%, white 18%), var(--m-accent));
  border-color: var(--m-accent);
  color: #07111d;
  box-shadow: 0 12px 24px rgba(88, 166, 255, 0.22);
}

.page-item.disabled .page-link {
  background-color: color-mix(in srgb, var(--m-bg-secondary) 92%, transparent);
  border-color: color-mix(in srgb, var(--m-border) 72%, transparent);
  color: var(--m-text-secondary);
  box-shadow: none;
  opacity: 0.6;
}

/* ==========================================================================
   22. List group, alerts, badges, modals, breadcrumbs, spinners
   ========================================================================== */

.list-group-item {
  background-color: var(--m-bg-secondary);
  border-color: var(--m-border);
  color: var(--m-text-primary);
}

.list-group-item-action:hover {
  background-color: var(--m-bg-hover);
  color: var(--m-text-primary);
}

.alert {
  background-color: var(--m-bg-secondary);
  border-color: var(--m-border);
  color: var(--m-text-primary);
}

.badge.bg-secondary {
  background-color: var(--m-badge-bg) !important;
}

.modal-content {
  background-color: var(--m-bg-secondary);
  color: var(--m-text-primary);
  border-color: var(--m-border);
}

.modal-header { border-bottom-color: var(--m-border); }
.modal-footer { border-top-color: var(--m-border); }

.spinner-border { color: var(--m-text-primary); }

/* ==========================================================================
   23. Linked attribute / modifier (dogma_effects_detail)
   ========================================================================== */

.linked-attribute {
  background-color: var(--m-bg-tertiary);
  border-radius: 6px;
  padding: 0.75rem;
  margin: 0.5rem 0;
  border: 1px solid var(--m-border);
}

.linked-attribute h5 {
  color: var(--m-accent);
  margin-bottom: 0.5rem;
}

.attribute-details {
  padding-left: 0.75rem;
  border-left: 3px solid var(--m-accent);
}

.modifier-item {
  background-color: var(--m-bg-secondary);
  border-radius: 4px;
  padding: 0.5rem;
  margin-left: -10px;
  border: 1px solid var(--m-border-subtle);
}

.modifier-item .detail-row,
.modifier-item .effect-row {
  padding: 8px 15px;
}

.modifier-header {
  font-weight: 600;
  margin-bottom: 5px;
  color: var(--m-accent);
}

/* ==========================================================================
   24. Login page
   ========================================================================== */

.eve-login-btn {
  display: inline-block;
  background: url('https://web.ccpgamescdn.com/eveonlineassets/developers/eve-sso-login-black-small.png') no-repeat;
  width: 195px;
  height: 30px;
  border: none;
  cursor: pointer;
}

/* ==========================================================================
   25. Explorer page — additional styles
   ========================================================================== */

.type-icon {
  width: 64px;
  height: 64px;
  object-fit: contain;
}

.explorer-breadcrumb .breadcrumb-item {
  cursor: pointer;
}

.explorer-breadcrumb .breadcrumb-item:not(.active):hover {
  text-decoration: underline;
}

.table-responsive {
  border-radius: 8px;
  max-width: 100%;
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
}

.no-items {
  text-align: center;
  padding: 2rem;
  background: var(--m-bg-secondary);
  border-radius: 8px;
  margin: 1rem 0;
}

.pagination-controls {
  margin-top: 1rem;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.sortable {
  cursor: pointer;
  user-select: none;
}

.sortable:hover {
  background-color: var(--m-table-hover);
}

.sortable .explorer-sort-icon {
  margin-left: 5px;
}

/* ==========================================================================
   26. Compare / resources page
   ========================================================================== */

.image-comparison {
  display: flex;
  gap: 10px;
  align-items: center;
}

.image-comparison .image-container {
  flex: 1;
}

.image-container span {
  display: block;
  font-size: 0.9em;
  color: var(--m-text-secondary);
  margin-bottom: 5px;
}

.video-comparison {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

.video-container {
  flex: 1;
  min-width: 300px;
}

video {
  border-radius: 4px;
}

details img {
  max-width: 100%;
  margin-top: 10px;
  border-radius: 4px;
}

/* ==========================================================================
   27. Scrollbar (dark theme polish)
   ========================================================================== */

::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

::-webkit-scrollbar-track {
  background: var(--m-bg-primary);
}

::-webkit-scrollbar-thumb {
  background: var(--m-border);
  border-radius: 4px;
}

::-webkit-scrollbar-thumb:hover {
  background: var(--m-text-secondary);
}

/* ==========================================================================
   29. Misc / utility
   ========================================================================== */

.is-hidden {
  display: none;
}

/* Badge size normalization */
.badge {
  font-size: 0.8em;
  padding: 0.4em 0.6em;
  text-transform: capitalize;
}

/* ==========================================================================
   12. Dashboard & Summary
   ========================================================================== */

.version-banner {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.35rem 0.75rem;
  margin-bottom: 0;
  background: var(--m-bg-secondary);
  border: 1px solid var(--m-border);
  border-radius: 4px;
  font-size: 0.82rem;
  color: var(--m-text-secondary);
}

.version-label {
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--m-text-secondary);
  font-size: 0.75rem;
}

.version-old {
  color: var(--m-diff-del-text);
  font-family: 'SFMono-Regular', Consolas, monospace;
}

.version-arrow {
  color: var(--m-text-secondary);
}

.version-new {
  color: var(--m-diff-add-text);
  font-family: 'SFMono-Regular', Consolas, monospace;
  font-weight: 600;
}

.version-path {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  min-width: 0;
}

.version-path__label {
  display: inline-flex;
  align-items: center;
  padding: 0.18rem 0.46rem;
  border-radius: 999px;
  background: color-mix(in srgb, var(--m-bg-tertiary) 70%, transparent);
  border: 1px solid var(--m-border-subtle);
  color: var(--m-text-secondary);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  flex-shrink: 0;
}

.version-chip {
  display: inline-flex;
  align-items: center;
  min-width: 0;
  padding: 0.28rem 0.6rem;
  border-radius: 999px;
  border: 1px solid var(--m-border-subtle);
  background: color-mix(in srgb, var(--m-bg-tertiary) 78%, transparent);
  white-space: nowrap;
}

.version-old,
.version-new {
  min-width: 0;
  white-space: normal;
  overflow-wrap: anywhere;
}

.nav-version-item {
  margin-left: 0.2rem;
}

.nav-version-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.38rem;
  min-width: 0;
  padding: 0.34rem 0.55rem;
  border-radius: 999px;
  border: 1px solid var(--m-border-subtle);
  background: color-mix(in srgb, var(--m-bg-tertiary) 76%, transparent);
  color: var(--m-text-secondary);
  font-size: 0.72rem;
  line-height: 1;
}

.nav-version-badge__label {
  font-size: 0.64rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--m-text-secondary);
}

.nav-version-badge__value {
  font-family: 'SFMono-Regular', Consolas, monospace;
  font-weight: 600;
}

.nav-version-badge__value--old {
  color: var(--m-diff-del-text);
}

.nav-version-badge__value--new {
  color: var(--m-diff-add-text);
}

.nav-version-badge__arrow {
  color: var(--m-text-secondary);
}

.nav-section-label {
  display: flex;
  align-items: center;
  padding: 0.5rem 0.75rem 0.25rem;
  font-size: 0.6rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--m-text-secondary);
  opacity: 0.6;
  pointer-events: none;
  list-style: none;
}

@media (max-width: 991.98px) {
  .nav-section-label {
    padding-top: 0.75rem;
    border-top: 1px solid var(--m-border-subtle);
    margin-top: 0.25rem;
  }
}

/* ==========================================================================
   14. Breadcrumbs
   ========================================================================== */

.breadcrumb {
  background: transparent;
  padding: 0;
  margin-bottom: 0;
  font-size: 0.85rem;
}

.breadcrumb-item a {
  color: var(--m-text-link);
  text-decoration: none;
}

.breadcrumb-item a:hover {
  text-decoration: underline;
}

.breadcrumb-item.active {
  color: var(--m-text-secondary);
}

.breadcrumb-item + .breadcrumb-item::before {
  color: var(--m-text-secondary);
}

/* ==========================================================================
   15. Data Density & Analysis Controls (Slice 2)
   ========================================================================== */

/* --- Stats Bar --- */
.stats-bar {
  display: flex;
  gap: 1rem;
  padding: 0.5rem 0;
  font-size: 0.8rem;
  font-family: 'SFMono-Regular', Consolas, monospace;
}

.stats-bar .stat-item {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
}

.stats-bar .stat-added { color: var(--m-diff-add-text); }
.stats-bar .stat-removed { color: var(--m-diff-del-text); }
.stats-bar .stat-modified { color: var(--m-diff-modify-text); }
.stats-bar .stat-total { color: var(--m-text-secondary); }


/* --- Hybrid Inline Changes --- */
.change-row {
  display: flex;
  align-items: baseline;
  gap: 0.375rem;
  padding: 0.2rem 0;
  font-size: 0.85rem;
  line-height: 1.4;
}

.change-attr {
  font-weight: 600;
  color: var(--m-text-primary);
  white-space: nowrap;
}

.change-arrow {
  color: var(--m-text-secondary);
  flex-shrink: 0;
}

.change-row.change-added { border-left: 2px solid var(--m-diff-add-text); padding-left: 0.5rem; }
.change-row.change-removed { border-left: 2px solid var(--m-diff-del-text); padding-left: 0.5rem; }
.change-row.change-modified { border-left: 2px solid var(--m-diff-modify-text); padding-left: 0.5rem; }

/* --- Value Pills --- */
.value-pill {
  display: inline-block;
  padding: 0.1rem 0.4rem;
  border-radius: 3px;
  font-size: 0.8rem;
  font-family: 'SFMono-Regular', Consolas, monospace;
}

.value-pill-old {
  background: rgba(255, 161, 152, 0.12);
  color: var(--m-diff-del-text);
}

.value-pill-new {
  background: rgba(126, 231, 135, 0.12);
  color: var(--m-diff-add-text);
}

.value-pill-modify {
  background: rgba(227, 179, 65, 0.12);
  color: var(--m-diff-modify-text);
}

/* --- Change More Toggle --- */
.change-more {
  margin-top: 0.25rem;
}

.change-more-toggle {
  font-size: 0.75rem;
  color: var(--m-accent);
  cursor: pointer;
  padding: 0.25rem 0;
}

.change-more-toggle:hover {
  text-decoration: underline;
}

/* --- Components Diff Blocks --- */
.diff-old-block,
.diff-removed-block {
  border-left: 2px solid var(--m-diff-del-text);
  padding-left: 0.5rem;
  margin-bottom: 0.5rem;
}

.diff-new-block {
  border-left: 2px solid var(--m-diff-add-text);
  padding-left: 0.5rem;
  margin-bottom: 0.5rem;
}

.diff-label-old,
.diff-label-new {
  display: inline-block;
  padding: 0.1rem 0.35rem;
  border-radius: 3px;
  font-size: 0.7rem;
  font-weight: 600;
  text-transform: uppercase;
  margin-bottom: 0.25rem;
}

.diff-label-old {
  background: rgba(255, 161, 152, 0.15);
  color: var(--m-diff-del-text);
}

.diff-label-new {
  background: rgba(126, 231, 135, 0.15);
  color: var(--m-diff-add-text);
}

/* --- Light theme overrides for pills --- */
[data-bs-theme="light"] .value-pill-old {
  background: rgba(207, 34, 46, 0.08);
}

[data-bs-theme="light"] .value-pill-new {
  background: rgba(26, 127, 55, 0.08);
}

[data-bs-theme="light"] .value-pill-modify {
  background: rgba(155, 119, 0, 0.08);
}

[data-bs-theme="light"] .diff-label-old {
  background: rgba(207, 34, 46, 0.10);
}

[data-bs-theme="light"] .diff-label-new {
  background: rgba(26, 127, 55, 0.10);
}

/* ==========================================================================
   30. Workbench overhaul — shared dense shell and diff surfaces
   ========================================================================== */

.app-body {
  min-height: 100vh;
}

.app-frame {
  min-height: 100vh;
}

.app-shell {
  padding: 1rem 1.25rem 1.5rem;
}

.app-navbar {
  backdrop-filter: blur(14px);
  background: color-mix(in srgb, var(--m-bg-secondary) 92%, transparent) !important;
  border-bottom: 1px solid var(--m-border);
}

.navbar-workbench {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 0.5rem 1rem;
}

.navbar .navbar-brand {
  display: inline-flex;
  align-items: center;
  gap: 0.65rem;
  padding: 0;
  margin-right: 0.5rem;
}

.brand-mark {
  width: 1.9rem;
  height: 1.9rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 0.5rem;
  background: var(--m-bg-tertiary);
  color: var(--m-accent);
  font-size: 1rem;
}

.brand-copy {
  display: flex;
  flex-direction: column;
  gap: 0.05rem;
  line-height: 1.1;
}

.brand-title {
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--m-text-primary);
}

.brand-subtitle {
  font-size: 0.68rem;
  color: var(--m-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

.navbar-collapse {
  flex-grow: 1;
}

.navbar-sections {
  display: flex;
  align-items: stretch;
  gap: 0.75rem;
  width: 100%;
}

.nav-cluster {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding-left: 0.75rem;
  border-left: 1px solid var(--m-border-subtle);
}

.nav-cluster:first-child {
  padding-left: 0;
  border-left: 0;
}

.nav-cluster .navbar-nav {
  flex-direction: row;
  flex-wrap: wrap;
  gap: 0.2rem;
}

.nav-section-label {
  padding: 0;
  margin: 0;
  font-size: 0.62rem;
  letter-spacing: 0.12em;
  opacity: 1;
}

.navbar .nav-link {
  padding: 0.4rem 0.65rem;
  border-radius: 999px;
  border: 1px solid transparent;
  font-size: 0.8rem;
  line-height: 1.1;
}

.navbar .nav-link:hover {
  background: var(--m-bg-hover);
  border-color: var(--m-border-subtle);
}

.navbar .nav-link.active {
  background: var(--m-bg-tertiary);
  border-color: var(--m-border);
  border-bottom: 1px solid var(--m-border);
  color: var(--m-text-primary);
  box-shadow: inset 0 0 0 1px rgba(88, 166, 255, 0.18);
}

.navbar-utility {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 0.75rem;
}

.theme-switch-wrapper {
  gap: 0.5rem;
  padding: 0;
}

.theme-switch-label {
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--m-text-secondary);
}

.theme-switch {
  width: 52px;
  height: 30px;
}

.slider:before {
  width: 22px;
  height: 22px;
}

input:checked + .slider:before {
  transform: translateX(22px);
}

.workbench-page {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.page-hero {
  display: flex;
  justify-content: space-between;
  gap: 0.5rem;
  align-items: center;
  padding: 0.75rem 1rem;
  border: 1px solid var(--m-border);
  border-radius: 6px;
  background: var(--m-bg-secondary);
}

.page-hero__main,
.page-hero__side {
  min-width: 0;
}

.page-hero__side {
  display: flex;
  justify-content: flex-end;
}

.page-kicker {
  display: none;
}

.surface-kicker {
  display: none;
}

.page-title-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-bottom: 0;
}

.page-title {
  font-size: 1.15rem;
  font-weight: 700;
  letter-spacing: -0.02em;
}

.page-badge {
  display: inline-flex;
  align-items: center;
  padding: 0.15rem 0.45rem;
  border-radius: 4px;
  background: var(--m-bg-tertiary);
  border: 1px solid var(--m-border);
  color: var(--m-text-secondary);
  font-size: 0.72rem;
  font-weight: 500;
}

.page-subtitle {
  display: block;
  margin-top: 0.2rem;
  max-width: 72ch;
  font-size: 0.82rem;
  line-height: 1.45;
  color: var(--m-text-secondary);
}

.page-subtitle strong {
  color: var(--m-text-primary);
  font-weight: 600;
}

.version-banner--compact {
  margin: 0;
  padding: 0.35rem 0.6rem;
  min-height: auto;
}

.summary-rail {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
  gap: 0.4rem;
}

.summary-card {
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 0.3rem;
  align-items: center;
  padding: 0.4rem 0.6rem;
  background: var(--m-bg-secondary);
  border: 1px solid var(--m-border);
  border-radius: 4px;
  text-decoration: none;
  color: var(--m-text-primary);
  min-width: 0;
  transition: border-color 0.15s ease, background-color 0.15s ease;
}

.summary-card:hover {
  border-color: var(--m-accent);
  background: var(--m-bg-tertiary);
  color: var(--m-text-primary);
}

.summary-card.is-active {
  box-shadow: inset 0 0 0 1px rgba(88, 166, 255, 0.2);
}

.summary-card__label {
  min-width: 0;
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--m-text-secondary);
}

.summary-card__value {
  font-family: 'SFMono-Regular', Consolas, monospace;
  font-size: 0.86rem;
  font-weight: 700;
  white-space: nowrap;
}

.summary-card__value--add { color: var(--m-diff-add-text); }
.summary-card__value--del { color: var(--m-diff-del-text); }
.summary-card__value--mod { color: var(--m-diff-modify-text); }

.workbench-surface {
  border: 1px solid var(--m-border);
  border-radius: 6px;
  background: var(--m-bg-secondary);
  overflow: visible;
}

.workbench-surface > :first-child {
  border-top-left-radius: inherit;
  border-top-right-radius: inherit;
}

.workbench-surface > :last-child,
.workbench-surface > .datatable-card:last-child .dataTables_wrapper,
.workbench-surface > .workbench-tab-content:last-child .tab-pane.active,
.workbench-surface > .workbench-tab-content:last-child .dataTables_wrapper {
  border-bottom-left-radius: inherit;
  border-bottom-right-radius: inherit;
}

.surface-header {
  display: flex;
  justify-content: space-between;
  gap: 0.75rem;
  align-items: center;
  padding: 0.5rem 1rem;
  border-bottom: 1px solid var(--m-border-subtle);
}

.surface-title {
  font-size: 0.9rem;
  font-weight: 650;
}

.stats-bar--compact {
  padding: 0;
  flex-wrap: wrap;
  justify-content: flex-end;
  row-gap: 0.35rem;
}

.analysis-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.4rem 0.75rem;
  border-bottom: 1px solid var(--m-border-subtle);
  background: color-mix(in srgb, var(--m-bg-secondary) 96%, transparent);
}

.sticky-toolbar {
  position: sticky;
  top: var(--app-sticky-offset);
  z-index: 20;
}

.toolbar-copy {
  min-width: 0;
}

.toolbar-title {
  font-size: 0.82rem;
  font-weight: 650;
}

.toolbar-note {
  display: block;
  max-width: 72ch;
  font-size: 0.78rem;
  line-height: 1.45;
  color: var(--m-text-secondary);
}

.toolbar-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 0.5rem;
  flex-wrap: wrap;
}

.toolbar-actions--wrap {
  row-gap: 0.4rem;
}

.clipboard-feedback {
  min-height: 1.2em;
  font-size: 0.75rem;
  color: var(--m-text-secondary);
  opacity: 0;
  transition: opacity 0.15s ease;
}

.clipboard-feedback.is-visible {
  opacity: 1;
}

.clipboard-feedback.is-error {
  color: var(--m-danger);
}

.datatable-card {
  padding: 0;
  max-width: 100%;
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
}

.datatable-card > .dataTables_wrapper {
  min-width: 100%;
}

.surface-body {
  padding: 0.75rem 1rem;
}

.surface-body--inset {
  padding: 1rem;
}

.surface-body--tight {
  padding: 0.5rem 0.75rem;
}

.surface-stack {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

.surface-stack--tight {
  gap: 0.75rem;
}

.dense-table {
  margin-bottom: 0 !important;
}

.dense-table .dataTables_empty {
  padding: 1rem !important;
}

.datatable-toolbar,
.datatable-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.4rem 0.75rem;
}

.datatable-toolbar {
  border-bottom: 1px solid var(--m-border-subtle);
  background: color-mix(in srgb, var(--m-bg-primary) 72%, transparent);
}

.datatable-footer {
  border-top: 1px solid var(--m-border-subtle);
  background: color-mix(in srgb, var(--m-bg-primary) 72%, transparent);
}

.dataTables_wrapper .dataTables_length,
.dataTables_wrapper .dataTables_filter,
.dataTables_wrapper .dataTables_paginate,
.dataTables_wrapper .dataTables_info {
  margin: 0;
}

.dataTables_wrapper .dataTables_paginate .pagination,
.pagination-controls .pagination {
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: center;
}

.dataTables_wrapper .dataTables_paginate .page-item,
.pagination-controls .page-item {
  margin: 0 !important;
}

.dataTables_wrapper .dataTables_length label,
.dataTables_wrapper .dataTables_filter label {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  color: var(--m-text-secondary);
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

.dataTables_wrapper .dataTables_filter input {
  min-width: 240px;
}

.workbench-tabs {
  padding: 0 1rem;
  margin-bottom: 0;
  background: var(--m-bg-secondary);
}

.workbench-tabs .nav-link {
  padding: 0.3rem 0.75rem;
  font-size: 0.8rem;
  font-weight: 600;
  border-bottom-width: 2px;
}

.workbench-tab-content .tab-pane {
  background: var(--m-bg-secondary);
}

.filter-bar {
  display: inline-flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.35rem;
}

.filter-btn {
  margin: 0;
  padding: 0.32rem 0.7rem;
  border-radius: 999px;
  font-size: 0.74rem;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  border: 1px solid var(--m-border);
  background: transparent;
  color: var(--m-text-secondary);
  cursor: pointer;
  transition: background 0.15s, border-color 0.15s, color 0.15s;
}

.filter-btn:hover {
  background: var(--m-bg-hover);
  color: var(--m-text-primary);
  border-color: var(--m-accent);
}

.filter-btn.active {
  background: var(--m-accent);
  border-color: var(--m-accent);
  color: #0d1117;
  font-weight: 600;
}

.entity-cell {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  min-width: 0;
}

.entity-link {
  font-weight: 600;
  text-decoration: none;
}

.entity-link:hover {
  text-decoration: underline;
}

.entity-meta {
  font-size: 0.74rem;
  color: var(--m-text-secondary);
}

.group-pill {
  display: inline-block;
  padding: 0.15rem 0.5rem;
  border-radius: 10px;
  background: var(--m-bg-tertiary);
  border: 1px solid var(--m-border-subtle);
  color: var(--m-text-secondary);
  font-size: 0.72rem;
  max-width: 100%;
  white-space: normal;
  word-break: break-word;
  overflow-wrap: anywhere;
  line-height: 1.3;
  vertical-align: top;
}

.description-cell,
.text-diff-cell,
.usage-cell {
  white-space: pre-wrap;
  word-break: break-word;
}

.description-cell {
  color: var(--m-text-secondary);
}

.workbench-page--types .description-cell {
  display: block;
  white-space: pre-wrap;
  word-break: break-word;
  overflow-wrap: anywhere;
  overflow: visible;
  max-height: none;
}

.attribute-stack {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

.attribute-preview {
  display: flex;
  flex-wrap: wrap;
  gap: 0.2rem;
}

.attribute-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  min-width: 0;
  padding: 0.15rem 0.45rem;
  border-radius: 4px;
  background: var(--m-bg-tertiary);
  border: 1px solid var(--m-border-subtle);
  font-size: 0.72rem;
  transition: border-color 0.15s;
}

.attribute-chip--highlight {
  border-left: 2px solid var(--m-accent);
}

.attribute-chip__key {
  color: var(--m-text-secondary);
}

.attribute-chip__value {
  color: var(--m-text-primary);
  font-family: 'SFMono-Regular', Consolas, monospace;
  font-variant-numeric: tabular-nums;
}

.attribute-chip--highlight .attribute-chip__value {
  color: var(--m-value-color);
}

.attribute-count {
  display: inline-flex;
  align-items: center;
  padding: 0.15rem 0.5rem;
  border-radius: 8px;
  background: var(--m-bg-tertiary);
  border: 1px solid var(--m-border-subtle);
  color: var(--m-text-secondary);
  font-size: 0.72rem;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  font-family: 'SFMono-Regular', Consolas, monospace;
}

.attribute-nonzero-hint {
  display: inline-flex;
  align-items: center;
  padding: 0.1rem 0.4rem;
  border-radius: 6px;
  background: color-mix(in srgb, var(--m-value-color) 12%, transparent);
  color: var(--m-value-color);
  font-size: 0.68rem;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  font-family: 'SFMono-Regular', Consolas, monospace;
}

.inline-details {
  border: 1px solid var(--m-border-subtle);
  border-radius: 4px;
  background: color-mix(in srgb, var(--m-bg-secondary) 80%, transparent);
  margin-top: 0.15rem;
  transition: border-color 0.15s;
}

.inline-details[open] {
  border-color: color-mix(in srgb, var(--m-border) 82%, rgba(255,255,255,0.08));
  border-left: 1px solid color-mix(in srgb, var(--m-border) 82%, rgba(255,255,255,0.08));
  background: color-mix(in srgb, var(--m-bg-tertiary) 86%, transparent);
}

.change-more[open],
.component-block[open] {
  border-color: color-mix(in srgb, var(--m-border) 82%, rgba(255,255,255,0.08));
  background: color-mix(in srgb, var(--m-bg-tertiary) 86%, transparent);
}

.inline-details > summary,
.change-more > summary,
.component-block > summary {
  list-style: none;
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.72rem;
  padding: 0.2rem 0.45rem;
  color: var(--m-text-secondary);
  cursor: pointer;
  border-radius: 3px;
}

.inline-details > summary:hover {
  color: var(--m-accent);
  background: var(--m-bg-hover);
}

.inline-details > summary::-webkit-details-marker,
.change-more > summary::-webkit-details-marker,
.component-block > summary::-webkit-details-marker {
  display: none;
}

.summary-count {
  color: var(--m-text-secondary);
  font-size: 0.74rem;
  font-family: 'SFMono-Regular', Consolas, monospace;
}

.kv-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 1px;
  padding: 0.3rem;
  background: var(--m-border-subtle);
  border-radius: 0 0 3px 3px;
}

.kv-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 0.5rem;
  font-size: 0.72rem;
  padding: 0.2rem 0.4rem;
  background: var(--m-bg-secondary);
}

.kv-row--highlight .kv-row__value {
  color: var(--m-value-color);
}

.kv-row__key {
  color: var(--m-text-secondary);
  white-space: normal;
  overflow-wrap: anywhere;
  min-width: 0;
}

.kv-row__value {
  font-family: 'SFMono-Regular', Consolas, monospace;
  font-variant-numeric: tabular-nums;
  white-space: normal;
  overflow-wrap: anywhere;
  text-align: right;
  flex-shrink: 0;
}

.workbench-page--types .attribute-stack {
  gap: 0.35rem;
}

.workbench-page--types .inline-details {
  border-radius: 12px;
  background: color-mix(in srgb, var(--m-bg-secondary) 88%, rgba(255, 255, 255, 0.015));
}

.workbench-page--types .inline-details[open] {
  border-color: color-mix(in srgb, var(--m-border) 82%, rgba(255,255,255,0.08));
  border-left-width: 1px;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.03);
}

.workbench-page--types .inline-details > summary {
  width: 100%;
  justify-content: flex-start;
  padding: 0.42rem 0.62rem;
  font-size: 0.74rem;
}

.workbench-page--types .inline-details[open] > summary {
  border-bottom: 1px solid var(--m-border-subtle);
}

.workbench-page--types .kv-list {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.32rem;
  padding: 0.45rem 0.5rem 0.5rem;
  background: transparent;
  border-radius: 0;
}

.workbench-page--types .kv-row {
  display: grid;
  grid-template-columns: minmax(72px, 1fr) minmax(0, auto);
  align-items: start;
  gap: 0.28rem 0.45rem;
  padding: 0.36rem 0.48rem;
  border: 1px solid var(--m-border-subtle);
  border-radius: 8px;
  background: color-mix(in srgb, var(--m-bg-primary) 22%, var(--m-bg-secondary));
}

.workbench-page--types .kv-row__key {
  line-height: 1.35;
  font-size: 0.69rem;
}

.workbench-page--types .kv-row__value {
  line-height: 1.35;
  text-align: right;
  font-size: 0.7rem;
}

.change-row {
  align-items: center;
  gap: 0.45rem;
}

.change-attr {
  min-width: 0;
  color: var(--m-text-secondary);
}

.mono-cell {
  font-family: 'SFMono-Regular', Consolas, monospace;
}

.text-diff-cell--diff ins,
.text-diff-cell--diff del {
  display: inline;
}

.table-icon-placeholder {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  color: var(--m-text-secondary);
}

.component-block {
  border: 1px solid var(--m-border-subtle);
  border-radius: 4px;
  background: color-mix(in srgb, var(--m-bg-primary) 72%, transparent);
  margin-bottom: 0.25rem;
}

.component-block:last-child {
  margin-bottom: 0;
}

.component-block__title {
  font-weight: 600;
  color: var(--m-text-primary);
}

.component-block__body {
  padding: 0.25rem 0.4rem 0.35rem;
}

.json-node {
  margin-left: 0.55rem;
  padding-left: 0.55rem;
  border-left: 1px solid var(--m-border-subtle);
}

.json-pair {
  display: flex;
  align-items: baseline;
  gap: 0.45rem;
  margin: 0.2rem 0;
  font-family: 'SFMono-Regular', Consolas, monospace;
  font-size: 0.77rem;
  word-break: break-word;
}

.json-pair--empty {
  color: var(--m-text-secondary);
}

.json-key {
  color: var(--m-accent);
  font-weight: 600;
}

.json-value {
  color: var(--m-text-primary);
}

.diff-old-block,
.diff-new-block,
.diff-removed-block {
  display: block;
  padding-top: 0.35rem;
}

@media (max-width: 1199.98px) {
  .navbar-workbench {
    flex-wrap: wrap;
  }

  .navbar-sections {
    flex-direction: column;
    gap: 0.9rem;
    padding-top: 0.75rem;
  }

  .nav-cluster {
    flex-direction: column;
    align-items: flex-start;
    border-left: 0;
    padding-left: 0;
  }
}

@media (max-width: 991.98px) {
  .app-shell {
    padding-inline: 0.75rem;
  }

  .page-hero,
  .surface-header,
  .analysis-toolbar,
  .datatable-toolbar,
  .datatable-footer {
    flex-direction: column;
    align-items: stretch;
  }

  .page-hero__side {
    justify-content: flex-start;
  }

  .stats-bar--compact {
    justify-content: flex-start;
  }

  .sticky-toolbar {
    position: static;
  }

  .dataTables_wrapper .dataTables_filter input {
    min-width: 0;
    width: 100%;
  }

  .kv-list {
    grid-template-columns: 1fr;
  }

  .summary-rail--detail {
    grid-template-columns: 1fr;
  }
}

/* ==========================================================================
   31. Cross-page consistency — shared layout patterns
   ========================================================================== */

.workbench-flow-links {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.workbench-flow-link {
  display: inline-flex;
  align-items: center;
  padding: 0.2rem 0.55rem;
  border-radius: 999px;
  border: 1px solid var(--m-border);
  background: var(--m-bg-secondary);
  color: var(--m-text-secondary);
  font-size: 0.73rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  text-decoration: none;
}

.workbench-flow-link:hover {
  color: var(--m-text-primary);
  border-color: var(--m-accent);
  background: var(--m-bg-hover);
}

.workbench-flow-link.is-active {
  border-color: color-mix(in srgb, var(--m-accent) 58%, var(--m-border));
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--m-accent) 24%, transparent);
  color: var(--m-text-primary);
}

.detail-grid {
  display: grid;
  gap: 0.65rem;
}

.detail-card {
  border: 1px solid var(--m-border-subtle);
  border-radius: 8px;
  background: var(--m-bg-tertiary);
  overflow: hidden;
}

.detail-card__header {
  padding: 0.5rem 0.75rem;
  border-bottom: 1px solid var(--m-border-subtle);
  background: color-mix(in srgb, var(--m-bg-secondary) 90%, transparent);
}

.workbench-page--types .table {
  table-layout: fixed;
  width: 100%;
}

.workbench-page--types .table td {
  word-wrap: break-word;
  overflow-wrap: break-word;
}

.workbench-page--types #newTypesTable td:first-child,
.workbench-page--types #newTypesTable th:first-child {
  width: 40px;
  min-width: 40px;
  max-width: 40px;
}

.workbench-page--effects #effectsTable .change-row {
  flex-wrap: wrap;
  align-items: baseline;
  row-gap: 0.15rem;
}

.workbench-page--effects #effectsTable .change-attr {
  white-space: normal;
  word-break: break-word;
  min-width: 0;
  max-width: 100%;
  flex-shrink: 1;
}

.workbench-page--effects #effectsTable .value-pill {
  word-break: break-all;
  white-space: normal;
}

.detail-card__header h4 {
  margin: 0;
  font-size: 0.82rem;
  font-weight: 650;
}

.detail-card__body {
  padding: 0.45rem 0.75rem;
}

.detail-card__body--flush {
  padding: 0;
}

.detail-card__body--prose {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}

.detail-card__body--prose > * {
  margin: 0;
}

/* Narrow workbench surface for detail pages */
.workbench-surface--narrow {
  max-width: 1200px;
}

/* Search page input group */
.search-input-group {
  display: flex;
  gap: 0;
}

.search-input-group .form-select {
  flex: 0 0 auto;
  width: auto;
}

.search-input-group .form-control {
  flex: 1 1 auto;
  min-width: 0;
}

.search-type-select {
  max-width: 140px;
}

.search-per-page-select {
  max-width: 120px;
}

.search-mode-hint,
.search-result-context,
.search-flow-note {
  font-size: 0.78rem;
  color: var(--m-text-secondary);
}

.search-mode-hint {
  margin-bottom: 0.6rem;
  padding-left: 0.1rem;
}

.search-result-context {
  margin-top: 0.15rem;
}

.search-empty-query-hint {
  margin-bottom: 0.5rem;
  padding: 0.35rem 0.6rem;
  border-left: 3px solid var(--m-danger);
  border-radius: 3px;
  background: var(--m-danger-bg);
  color: var(--m-danger);
  font-size: 0.82rem;
}

.search-mode-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.82rem;
}

.search-mode-table__row {
  border-bottom: 1px solid var(--m-border-subtle);
}

.search-mode-table__head,
.search-mode-table__cell {
  padding: 0.45rem 0.6rem 0.45rem 0;
}

.search-mode-table__head {
  padding-top: 0.3rem;
  padding-bottom: 0.4rem;
  color: var(--m-text-secondary);
  font-weight: 600;
}

.search-mode-table__head--mode,
.search-mode-table__cell--mode {
  width: 18%;
}

.search-mode-table__head--input {
  width: 38%;
}

.search-mode-table__cell {
  color: var(--m-text-secondary);
}

.search-mode-table__cell--mode {
  color: var(--m-text-primary);
  font-weight: 600;
}

.search-mode-table__emphasis {
  color: var(--m-text-primary);
  font-weight: 600;
}

.search-flow-note {
  margin: 0.65rem 0 0;
}

/* Login page centered layout */
.login-page {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 60vh;
  padding: 2rem 1rem;
}

.login-card {
  background: var(--m-bg-secondary);
  border: 1px solid var(--m-border);
  border-radius: 8px;
  padding: 2rem;
  min-width: 320px;
  max-width: 420px;
  width: 100%;
  text-align: center;
}

.login-card h2 {
  margin-bottom: 1.5rem;
  font-size: 1.25rem;
  font-weight: 700;
}

/* Dungeon detail description text */
.text-breakspaces {
  white-space: break-spaces;
}

/* Summary rail for detail pages (stats cards) */
.summary-rail--detail {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 0.5rem;
}

/* Explorer controls */
.explorer-controls {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}

.explorer-view-toggle .wb-btn--ghost.active,
.explorer-view-toggle .wb-btn--ghost.is-active {
  background: var(--m-accent);
  border-color: var(--m-accent);
  color: #0d1117;
}

@media (max-width: 767.98px) {
  .app-shell {
    padding-top: 0.85rem;
    padding-inline: 0.55rem;
    padding-bottom: 1.3rem;
  }

  .navbar-workbench {
    gap: 0.6rem;
    padding: 0.42rem 0.65rem;
  }

  .navbar .navbar-brand {
    gap: 0.5rem;
    margin-right: 0;
    min-width: 0;
  }

  .brand-mark {
    width: 1.7rem;
    height: 1.7rem;
    font-size: 0.9rem;
  }

  .brand-title {
    font-size: 0.88rem;
  }

  .brand-subtitle {
    font-size: 0.58rem;
    letter-spacing: 0.06em;
  }

  .navbar-utility {
    gap: 0.45rem;
  }

  .theme-switch-label {
    display: none;
  }

  .nav-version-item {
    width: 100%;
    margin-left: 0;
  }

  .nav-version-badge {
    width: 100%;
    justify-content: space-between;
  }

  .page-header {
    gap: 0.2rem;
  }

  .page-header--with-actions {
    gap: 0.6rem;
  }

  .page-header__actions,
  .toolbar-actions,
  .surface-header-actions {
    width: 100%;
    justify-content: flex-start;
  }

  .surface-header,
  .analysis-toolbar,
  .datatable-toolbar,
  .datatable-footer {
    padding: 0.72rem 0.78rem;
  }

  .surface-body,
  .detail-card__body {
    padding: 0.72rem 0.78rem;
  }

  .summary-rail {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.45rem;
  }

  #dashboardGrid .summary-card {
    min-height: 0;
    padding: 0.52rem 0.62rem;
    gap: 0.35rem;
  }

  #dashboardGrid .summary-card__label {
    font-size: 0.68rem;
    white-space: normal;
  }

  #dashboardGrid .summary-card__value {
    font-size: 0.78rem;
  }

  .workbench-flow-links {
    gap: 0.35rem;
  }

  .workbench-flow-link {
    padding: 0.18rem 0.46rem;
    font-size: 0.66rem;
    letter-spacing: 0.05em;
  }

  .inline-details > summary,
  .change-more > summary,
  .component-block > summary {
    display: flex;
    width: 100%;
    max-width: 100%;
    flex-wrap: wrap;
    box-sizing: border-box;
  }

  .change-row {
    flex-wrap: wrap;
    align-items: flex-start;
  }

  .change-attr {
    flex: 1 0 100%;
    min-width: 0;
    max-width: 100%;
    white-space: normal;
    overflow-wrap: anywhere;
  }

  .value-pill {
    white-space: normal;
    word-break: break-word;
    overflow-wrap: anywhere;
  }

  .component-block__title {
    white-space: normal;
    word-break: break-word;
    overflow-wrap: anywhere;
  }

  .detail-table-label {
    white-space: normal;
  }

  .dataTables_wrapper .dataTables_length label,
  .dataTables_wrapper .dataTables_filter label {
    width: 100%;
    gap: 0.35rem;
    flex-wrap: wrap;
  }

  .dataTables_wrapper .dataTables_filter input {
    width: 100%;
    min-width: 0;
  }

  .datatable-card > .dataTables_wrapper {
    min-width: 760px;
  }

  .workbench-page--types .datatable-card > .dataTables_wrapper {
    min-width: 880px;
  }

  .table-responsive > .table {
    min-width: 640px;
  }

  .workbench-page--types .table {
    table-layout: auto;
  }

  .search-input-group {
    flex-direction: column;
    gap: 0.55rem;
  }

  .dataTables_wrapper .dataTables_paginate,
  .pagination-controls,
  .pagination-controls nav {
    justify-content: center !important;
  }

  .dataTables_wrapper .dataTables_paginate .pagination,
  .pagination-controls .pagination {
    justify-content: center;
  }

  .dataTables_wrapper .dataTables_paginate .page-link,
  .pagination-controls .page-link {
    min-width: 36px;
    min-height: 36px;
    padding: 0.38rem 0.62rem;
    font-size: 0.78rem;
  }

  .explorer-controls {
    flex-direction: column;
    align-items: stretch;
    gap: 0.55rem;
  }
}

/* Compare page summary card */
.summary-stat-card {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  padding: 0.75rem 1rem;
  background: var(--m-bg-secondary);
  border: 1px solid var(--m-border);
  border-radius: 6px;
  min-height: 100%;
  transition: border-color 0.15s ease, background-color 0.15s ease;
}

.summary-stat-card:hover {
  border-color: var(--m-accent);
  background: var(--m-bg-tertiary);
}

.summary-stat-card__value {
  font-family: 'SFMono-Regular', Consolas, monospace;
  font-size: 1.25rem;
  font-weight: 700;
  color: var(--m-text-primary);
  line-height: 1.1;
}

.summary-stat-card__label {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--m-text-secondary);
}

.summary-stat-card__sub {
  font-size: 0.8rem;
  color: var(--m-text-secondary);
  font-family: 'SFMono-Regular', Consolas, monospace;
}

.summary-stat-card__sub--up {
  color: var(--m-diff-del-text);
}

.summary-stat-card__sub--down {
  color: var(--m-diff-add-text);
}

/* Reward plot container */
.plot-container {
  background: var(--m-bg-secondary);
  border: 1px solid var(--m-border);
  border-radius: 6px;
  padding: 0.75rem;
}

.plot-container--tall {
  height: 800px;
}

.plot-container h3 {
  font-size: 0.9rem;
  font-weight: 650;
  margin-bottom: 0.5rem;
}

/* Shared empty state */
.empty-state {
  text-align: center;
  padding: 2rem;
  color: var(--m-text-secondary);
}

.empty-state p {
  margin: 0;
}

/* Filter result list (search page) */
.filter-result-list .list-group-item {
  border-color: var(--m-border-subtle);
  padding: 0.5rem 0.75rem;
}

/* Consistent wb-btn for outline styles */
.wb-btn--outline {
  background: transparent;
  border-color: var(--m-border);
  color: var(--m-text-secondary);
}

.wb-btn--outline:hover {
  background: var(--m-bg-hover);
  color: var(--m-text-primary);
  border-color: var(--m-accent);
}

.wb-btn--outline.active,
.wb-btn--outline.is-active {
  background: var(--m-accent);
  border-color: var(--m-accent);
  color: #0d1117;
}

.wb-btn--danger {
  background: color-mix(in srgb, var(--m-danger) 15%, transparent);
  border-color: color-mix(in srgb, var(--m-danger) 40%, transparent);
  color: var(--m-danger);
}

.wb-btn--danger:hover {
  background: color-mix(in srgb, var(--m-danger) 25%, transparent);
  border-color: var(--m-danger);
  color: var(--m-danger);
}

/* Admin page token badges — see section 15 */
.app-body--auth .app-shell {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  padding-block: 2rem;
}

.auth-shell {
  width: min(100%, 560px);
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}

.auth-card__eyebrow {
  margin-bottom: 0.4rem;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--m-text-secondary);
}

.auth-card__title {
  margin-bottom: 0.5rem;
  font-size: 1.35rem;
  font-weight: 700;
}

.auth-card__copy {
  margin-bottom: 1rem;
  color: var(--m-text-secondary);
}

.auth-actions {
  display: flex;
  justify-content: center;
}

.auth-error {
  margin-bottom: 1rem;
  padding: 0.5rem 0.65rem;
  border-left: 3px solid var(--m-danger);
  border-radius: 4px;
  background: var(--m-danger-bg);
  color: var(--m-danger);
  text-align: left;
}

.eve-login-btn {
  border-radius: 4px;
  overflow: hidden;
}

.eve-login-btn:hover {
  filter: brightness(1.05);
}

.detail-table-label {
  width: 30%;
  color: var(--m-text-secondary);
  font-weight: 600;
  white-space: nowrap;
}

.dungeons-col-id {
  width: 7%;
}

.dungeons-col-name {
  width: 18%;
}

.dungeons-col-description {
  width: 45%;
}

.dungeons-col-faction,
.dungeons-col-difficulty {
  width: 10%;
}

.dungeons-col-archetype {
  width: 15%;
}

.explorer-page {
  gap: 0.75rem;
}

.rewards-results {
  margin-top: 1rem;
}

.explorer-items-per-page {
  width: auto;
}

.explorer-body {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

.table-icon-image {
  width: 32px;
  height: 32px;
  object-fit: contain;
}

.explorer-grid-card__media {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 80px;
}

.explorer-table-col-icon {
  width: 50px;
}

.explorer-table-col-id {
  width: 100px;
}

.explorer-table-row {
  cursor: pointer;
}

.explorer-table-desc {
  max-width: 300px;
}

.explorer-icon,
.explorer-sort-icon,
.explorer-empty-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
}

.explorer-icon {
  min-width: 1em;
}

.explorer-icon--grid::before {
  content: "▦";
}

.explorer-icon--table::before {
  content: "☰";
}

.explorer-sort-icon {
  min-width: 1em;
  color: var(--m-text-secondary);
}

.explorer-sort-icon--active {
  color: var(--m-text-primary);
}

.explorer-empty-icon {
  margin-bottom: 0.75rem;
  font-size: 2.5rem;
  color: var(--m-text-secondary);
}

.explorer-loading-state {
  min-height: 140px;
}

.modal-body--surface {
  background: color-mix(in srgb, var(--m-bg-secondary) 94%, transparent);
}
